/**
 * 枚举项字典类型
 * 以枚举值为键，{label, color}为值
 */
export type EnumDict<T extends number | string = number> = {
  [key in T extends number ? T : string]?: {
    /** 显示标签 */
    label: string;
    /** 显示颜色 */
    color?: string;
  };
};

/**
 * 枚举项接口（向后兼容）
 */
export interface EnumItem<T extends number | string = number> {
  /** 枚举值 */
  value: T;
  /** 显示标签 */
  label: string;
  /** 显示颜色 */
  color?: string;
}

/**
 * 获取枚举值对应的中文名称
 * @param enumValue 枚举值
 * @param enumDict 枚举字典，格式为 EnumDict<T>
 * @returns 中文名称
 */
export function getEnumLabel<T extends number | string>(
  enumValue: T,
  enumDict: EnumDict<T>,
): string {
  const key = enumValue as string | number;
  const info = enumDict[key as keyof typeof enumDict];
  return info?.label || String(enumValue);
}

export function getEnumColor<T extends number | string>(
  enumValue: T,
  enumDict: EnumDict<T>,
): string {
  const key = enumValue as string | number;
  const info = enumDict[key as keyof typeof enumDict];
  return info?.color || 'default';
}

export function getEnumItem<T extends number | string>(
  enumValue: T,
  enumDict: EnumDict<T>,
): EnumItem<T> {
  const key = enumValue as string | number;
  const info = enumDict[key as keyof typeof enumDict];
  return {
    value: enumValue,
    label: info?.label || String(enumValue),
    color: info?.color || 'default',
  };
}
